草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - 当我在四核机器上使用多线程时,为什么这段代码看不到任何显着的性能提升?

我写了一些Java代码来学习更多关于Executor框架的知识。具体来说,我编写了代码来验证CollatzHypothesis-这表示如果您将以下函数迭代应用于任何整数,您最终会得到1:f(n)=((n%2)==0)?n/2:3*n+1CH仍未得到证实,我认为这是了解Executor的好方法。每个线程都分配了一个整数范围[l,u]来检查。具体来说,我的程序有3个参数-N(我要检查CH的数字)、RANGESIZE(线程必须处理的间隔的长度)和NTHREAD,线程池的大小。我的代码运行良好,但我看到的加速比我预期的要少得多——当我从1个线程变为4个线程时,加速大约为30%。我的逻辑是计算完

java - Java 中线程中的线程?

我目前正在考虑如何用Java设计一个多线程系统,需要做一些繁重的网络处理和数据库存储。该程序首先会启动三个基本线程。沿着这些基本线程,我想不是从主程序而是从两个线程启动其他线程。一个线程是否有可能启动另一个线程导致某种层次结构,例如:>Parent->t0thread1->t1tread1.1>->t0thread2>->t0thread3->t2thread3.1t0=initaltimet1,t2=timeatapointintherunningthreadt1!=t2如果不能,有人可以提供带有引用的理论解决方案吗? 最佳答案

java - 如何杀死处于 RUNNING 状态的 Java 线程?

有可能以非编程方式杀死处于RUNNING状态的线程吗?我知道*nix中的top命令可以显示线程。我可以终止操作系统中的线程吗?我想知道是否有一种方法可以将一个线程链接到一个进程,这样我就可以只终止那个特定的线程而不是应用程序。我们的代码中有一个错误,该错误使同步方法中的线程处于RUNNING状态。线程保持对“挂起”应用程序的对象的锁。错误已修复。但我想知道是否可能。 最佳答案 简短的回答是“也许,但你不应该,而且大多数时候它也不会起作用”。长答案是:“也许……”一些JVM实现将java线程映射到OS线程,而另一些则不。如果JVM映射

java - 如何测量线程堆栈深度?

我有一个具有可扩展性问题的32位Java服务:由于用户数过多,我们会因为线程数过多而耗尽内存。从长远来看,我计划切换到64位并降低每用户线程的比率。在短期内,我想减少堆栈大小(-Xss,-XX:ThreadStackSize)以获得更多的空间。但这是有风险的,因为如果我把它弄得太小,我就会得到StackOverflowErrors。如何测量应用程序的平均和最大堆栈大小以指导我决定最佳-Xss值?我对两种可能的方法感兴趣:在集成测试期间测量正在运行的JVM。哪些分析工具会报告最大堆栈深度?寻找深层调用层次结构的应用程序的静态分析。依赖注入(inject)中的反射使得这不太可能奏效。更新:

java - RMI 线程阻止 JVM 在 main() 完成后退出

长话短说,在我的应用程序不再需要RMI后,我无法关闭几个JavaRMI的非守护线程。这可以防止JVM在main()完成时退出。我知道导出UnicastRemoteObject会导致RMI保持线程打开,直到您成功调用UnicastRemoteObject.unexportObject(Objecto,booleanforce)。下面是一个示例(无需修改即可运行,JVM将正常退出-删除对unexportObject的调用,JVM将永远不会退出):importjava.rmi.registry.LocateRegistry;importjava.rmi.registry.Registry;i

java - Struts2线程中的拦截器不安全吗?

据我所知,Struts2Action类是线程安全的,因为这些操作都放在值堆栈中。ValueStack又是ActionContext的一部分。由于ActionContext是线程本地的,因此存储在ActionContext中的值(包括值堆栈)对于每个线程都是唯一的。因此,Actions是线程安全的。但是考虑拦截器:它们真的很有用,它们为程序员做所有那些乏味的小工作......比如验证,获取参数值等。但要考虑的是:拦截器可以在多个之间共享要求。那么这是否会使拦截器线程不安全?带着这个问题,我试着上网找了一些与这个问题相关的好文章。我找到了一篇非常好的文章,他们在其中用示例清楚地提到了拦截器

java - 线程 "main"java.net.UnknownHostException : services. gradle.org 中的异常

我在执行gradle.bat时遇到以下错误。我检查了URL路径,看起来不错。URL在包装器属性中定义如下:distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-bin.zip这是错误信息:Downloadinghttps://services.gradle.org/distributions/gradle-2.1-bin.zipExceptioninthread"main"java.net.UnknownHostException:services.gradle.orgatjava.net.Plain

java - 如果多个线程正在更新同一个变量,应该怎么做才能使每个线程正确更新变量?

如果多个线程正在更新同一个变量,我应该怎么做才能让每个线程都正确更新变量?任何帮助将不胜感激 最佳答案 有几个选项:1)完全不使用同步这只有在数据是原始类型(不是long/double)的情况下才有效,并且您不关心读取过时的值(这不太可能)2)将字段声明为volatile这将保证永远不会读取过时的值。它也适用于对象(假设对象在创建后未更改),因为volatile变量的happens-before保证(参见“Java内存模型”)。3)使用java.util.concurrent.AtomicLong、AtomicInteger等它们都

Java 线程和同步块(synchronized block)

假设我在某个线程中执行一个synchronized代码块,在synchronizedblock中我调用了一个方法来生成另一个线程来处理一个同步代码块这需要与第一种方法相同的锁。所以在伪Java代码中:publicvoidsomeMethod(){synchronized(lock_obj){//awholebunchofstuff...//thisisthelaststatementintheblock(newThread(someOtherMethod())).start();}//somemorecodethatdoesn'trequirealock}publicvoidsomeO

java - 是什么让线程的执行顺序不可预测?

是什么让线程的执行顺序不可预测?调度程序是否在某个时候使用随机数或检查系统资源或查看哪个线程已等待足够长的时间或......? 最佳答案 调度器通常是操作系统的调度器。它受到许多因素的影响,包括机器上的其他进程在做什么,硬件在做什么(中断)等。根据操作系统的不同,我想有时可能会涉及随机数,但我怀疑通常不会。它更像是多个可变时间间隔可以重叠的不可预测的方式。 关于java-是什么让线程的执行顺序不可预测?,我们在StackOverflow上找到一个类似的问题: